package com.rs.util;


import com.rs.entity.basic.MapDataPointVO;

/**
 * 计算工具
 *
 * @author zhouwz
 * @date 2020/3/19 18:38
 */
public class CalcMapUtil {

    /**
     * 计算两点的距离
     */
    public static double getDistance(MapDataPointVO a, MapDataPointVO b) {
        double i = Math.pow((a.getXCoordinate().doubleValue() - b.getXCoordinate().doubleValue()), 2);
        double j = Math.pow((a.getYCoordinate().doubleValue() - b.getYCoordinate().doubleValue()), 2);
        return Math.sqrt(i + j);
    }

    /**
     * 计算两点的方位角
     */
    public static double getAngel(MapDataPointVO a, MapDataPointVO b) {
        double dx = b.getXCoordinate().doubleValue() - a.getXCoordinate().doubleValue();
        double dy = b.getYCoordinate().doubleValue() - a.getYCoordinate().doubleValue();
        //两个点坐标相同
        if (dx == 0 && dy == 0) {
            return 0;
        }
        //说明在一条竖线上 ,为90或者-90度
        if (dx == 0 && dy != 0) {
            return dy > 0 ? -90 : 90;
        }
        //说明在一条横线上,为0或者180
        if (dx != 0 && dy == 0) {
            return dx > 0 ? 0 : 180;
        }
        //说明不在一条直线上
        if (dx != 0 && dy != 0) {
            double ang = Math.atan(dy / dx) * 180 / Math.PI;
            //右下,左上
            if (ang >= 45) {
                //原点上部
                if (dx > 0) {
                    ang = 0;
                } else {//原点下部
                    ang = 180;
                }
                //右下,左上
            } else if (ang >= 0 && ang < 45) {
                //原点上部
                if (dy > 0) {
                    ang = 90;
                } else {//原点下部
                    ang = -90;
                }
            } else if (ang > -45 && ang < 0) {

                //原点上部
                if (dx > 0) {
                    ang = 0;
                    //原点下部
                } else {
                    ang = 180;
                }
            } else if (ang > -90 && ang <= -45) {
                //原点上部
                if (dx > 0) {
                    ang = 90;
                    //原点下部
                } else {
                    ang = -90;
                }
            }
            return ang;
        }
        return 0;
    }
}
